home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 5 / Apprentice-Release5.iso / Source Code / Libraries / SAT 2.3.8 / Demos / SAT Invaders demo ƒ / sMissile.p < prev    next >
Text File  |  1996-05-23  |  2KB  |  78 lines

  1. {===============================================}
  2. {================= Missile sprite unit ================}
  3. {===============================================}
  4.  
  5. { Example file for Ingemars Sprite Animation Toolkit. }
  6. { © Ingemar Ragnemalm 1992 }
  7. { See doc files for legal terms for using this code. }
  8.  
  9. unit sMissile;
  10.  
  11. { Sprite unit. A sprite unit should include the following routines:}
  12. { Init-procedure, that initializes private bitmaps}
  13. { Setup-procedure, that sets variables other than the standard ones set by MakeSprite }
  14. { Handle-procedure, to be called once per iteration until the sprite dies }
  15. { Hittask-procedure (optional), for advanced collission handling. }
  16.  
  17. { Missile object for the SATInvaders sample game. }
  18.  
  19. interface
  20.  
  21.     uses
  22. {$IFC UNDEFINED THINK_PASCAL}
  23.         Types, QuickDraw, {}
  24. {$ENDC}
  25.         SAT, SoundConst, GameGlobals;
  26.  
  27.     var
  28.         missilecount: integer; { Exported since it has to be reset by SetupLevel }
  29.  
  30.     procedure InitMissile;
  31.     procedure SetupMissile (sp: SpritePtr);
  32.     procedure HandleMissile (me: SpritePtr);
  33.  
  34. implementation
  35.  
  36.     const
  37.         missileSpeed = 10;
  38.         maxMissiles = 5;
  39.  
  40.     var
  41.         missileFace: FacePtr;
  42.  
  43.     procedure InitMissile;
  44.     begin
  45.         missileFace := SATGetFace(136);
  46.     end;
  47.  
  48.     procedure SetupMissile (sp: SpritePtr);
  49.     begin
  50.         sp^.face := missileFace;
  51.         SetRect(sp^.hotRect, 3, 0, 13, 17); {How big are we?}
  52.  
  53.         if missilecount >= maxMissiles then
  54.             sp^.task := nil { If too many, remove us immediately }
  55.         else
  56.             missilecount := succ(missilecount); {One missile more}
  57.         sp^.task := @HandleMissile;
  58.     end;
  59.  
  60.     procedure HandleMissile (me: SpritePtr);
  61.     begin
  62.         if me^.kind <> -1 then {Hit something}
  63.             begin
  64.                 me^.task := nil; {Remove us}
  65.                 missilecount := pred(missilecount); {One missile less}
  66.                 SATSoundPlay(dunkH, 1, false); {Play a sound (with rather low priority) }
  67.             end;
  68.  
  69.         me^.position.v := me^.position.v + missileSpeed; {Move down}
  70.  
  71.         if me^.position.v > gSAT.offSizeV then {Outside - remove}
  72.             begin
  73.                 me^.task := nil;
  74.                 missilecount := pred(missilecount);
  75.             end;
  76.     end;
  77.  
  78. end.